package com.example.func.annotation;

import com.example.func.enums.OpType;
import com.example.func.enums.Scenario;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 请求日志记录注解
 * 用于标记需要记录请求参数的方法
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RequestLog {
    
    /**
     * 模块名称
     * @return 模块名称
     */
    String module() default "";

    /**
     * 业务场景（包含模块与可选的 serviceName）
     * 若不为 NONE，切面将优先使用此值
     */
    Scenario scenario() default Scenario.NONE;

    /**
     * 业务 Bean 名称
     * 可用于在切面中通过 ApplicationContext 动态获取对应的 Bean
     * @return Spring 容器中的 Bean 名称
     */
    String serviceName() default "";

    /**
     * 操作类型
     * 用于区分当前操作是新增还是修改
     * @return 操作类型枚举
     */
    OpType opType() default OpType.CREATE;
}
